package de.codecentric.jenkins.dashboard.ec2; import hudson.Extension; import hudson.util.FormValidation; import hudson.util.Secret; import java.util.logging.Logger; import javax.annotation.Nonnull; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; import org.springframework.util.StringUtils; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.ec2.AmazonEC2Client; import com.cloudbees.plugins.credentials.Credentials; import com.cloudbees.plugins.credentials.CredentialsDescriptor; import com.cloudbees.plugins.credentials.CredentialsScope; import com.cloudbees.plugins.credentials.NameWith; import com.cloudbees.plugins.credentials.common.StandardCredentials; import com.cloudbees.plugins.credentials.impl.BaseStandardCredentials; import de.codecentric.jenkins.dashboard.Messages; import de.codecentric.jenkins.dashboard.impl.environments.ec2.EC2Connector; import edu.umd.cs.findbugs.annotations.CheckForNull; @NameWith(value = StandardCredentials.NameProvider.class, priority = -16) public class AwsKeyCredentials extends BaseStandardCredentials { private final static Logger LOGGER = Logger.getLogger(AwsKeyCredentials.class.getName()); private static final long serialVersionUID = 7732948788576624160L; public String key; public Secret secret; @DataBoundConstructor public AwsKeyCredentials(@CheckForNull CredentialsScope scope, @CheckForNull String id, @CheckForNull String description, @Nonnull String key, @Nonnull Secret secret) { super(scope, id != null ? id : key, description); this.key = key; this.secret = secret; } public AWSCredentials getAwsAuthCredentials() { return new BasicAWSCredentials(key, secret.getPlainText()); } @Extension public static class AwsKeyCredentialsDescriptor extends CredentialsDescriptor { public AwsKeyCredentialsDescriptor(Class<? extends Credentials> clazz) { super(clazz); } public AwsKeyCredentialsDescriptor() { // required } @Override public String getDisplayName() { return Messages.AwsKeyCredentials_name(); } public FormValidation doTestAwsConnection(@QueryParameter("key") final String accessKey, @QueryParameter("secret") final Secret secretKey) { LOGGER.info("Verify AWS connection key " + accessKey); FormValidation validationResult; try { final AWSCredentials awsCredentials = createCredentials(accessKey, secretKey.getPlainText()); final EC2Connector conn = new EC2Connector(new AmazonEC2Client(awsCredentials)); validationResult = conn.areAwsCredentialsValid() ? FormValidation.ok(Messages.AwsKeyCredentials_awsConnectionSuccessful()) : FormValidation.warning(Messages .AwsKeyCredentials_awsConnectionFailed()); } catch (Exception e) { LOGGER.severe(e.getMessage()); validationResult = FormValidation.error(Messages.AwsKeyCredentials_awsConnectionCritical() + e.getMessage()); } return validationResult; } /** * create AWS-credentials from either access/secret-strings or global * credentials Explicit strings have priority above credentials * * @param accessKey AWS access key * @param secretKey AWS secret key * @return a credentials-object or null if no valid credentials where * provided */ protected AWSCredentials createCredentials(final String accessKey, final String secretKey) { AWSCredentials result = null; if (StringUtils.hasText(accessKey) && StringUtils.hasText(secretKey)) { result = new BasicAWSCredentials(accessKey, secretKey); } return result; } } }